--[[ 自制的stg模块,基本完成了主要的功能,stg游戏可使用本模块并修改参数.
  主要是打包了画竖线,横线,中心方块的功能
  
  增加了处理读档存档信息窗口位置的函数
  
  By setycyas @2025-09-18
]]

-- 这里设定基本参数
local MySTG = {
  -- 脚本名,显示识别运行等使用
  NAME = "MySTG",
  -- 分辨率,注意长的为X!!!对于大部分竖版stg来说这数字要注意,因为mame的绘图坐标也旋转过!
  X_RESOLUTION = 320.0,
  Y_RESOLUTION = 224.0,
  -- 设备获取方法
  cpuIndex = ':maincpu', --获取cpu=manager.machine.devices[cpuIndex]
  memIndex = 'program', --获取内存mem=cpu.spaces[memIndex]
  screenIndex = ':screen', --获取screen=manager.machine.screens[screenIndex],也可能':screen.0'
}

-- 指定x或y坐标,画直线,如果宽为1是直线,否则变长一个有宽度的矩形.
-- x或y坐标是整数,指的是像素位置,最后除以分辨率获得mame绘图坐标(浮点数)
function MySTG.xLine(x, color, width)
  local container
  local x0, x1
  container = manager.machine.screens[MySTG.screenIndex].container
  --默认颜色为纯白
  if color == nil then
    color = 0xFFffffff
  end
  --默认宽度为1
  if width == nil then
    width = 1
  end
  
  --宽度为1,画直线
  if width == 1 then
    x0 = x/MySTG.X_RESOLUTION
    container:draw_line(x0, 0.0, x0, 1.0, color)
  -- 画长矩形
  else
    x0 = (x-width/2.0)/MySTG.X_RESOLUTION
    x1 = (x+width/2.0)/MySTG.X_RESOLUTION
    container:draw_box(x0, 0.0, x1, 1.0, color, color)
  end

end
function MySTG.yLine(y, color, width)
  local container
  local y0, y1
  container = manager.machine.screens[MySTG.screenIndex].container
  --默认颜色为纯白
  if color == nil then
    color = 0xFFffffff
  end
  --默认宽度为1
  if width == nil then
    width = 1
  end
  
  --宽度为1,画直线
  if width == 1 then
    y0 = y/MySTG.Y_RESOLUTION
    container:draw_line(0.0, y0, 1.0, y0, color)
  -- 画长矩形
  else
    y0 = (y-width/2.0)/MySTG.Y_RESOLUTION
    y1 = (y+width/2.0)/MySTG.Y_RESOLUTION
    container:draw_box(0.0, y0, 1.0, y1, color, color)
  end

end

-- 指定中心坐标x,y(整数),画一个指定宽(对应x)高(对应y)的箱体
-- 指定边框和内部颜色
function MySTG.centerBox(x, y, width, height, borderColor, boxColor)
  local container
  local x0, x1, y0, y1
  container = manager.machine.screens[MySTG.screenIndex].container
  --默认色
  if borderColor == nil then
    borderColor = 0xFFff0000
  end
  if boxColor == nil then
    boxColor = borderColor
  end
  
  x0, x1 = (x-width/2.0)/MySTG.X_RESOLUTION, (x+width/2.0)/MySTG.X_RESOLUTION
  y0, y1 = (y-height/2.0)/MySTG.Y_RESOLUTION, (y+height/2.0)/MySTG.Y_RESOLUTION
  container:draw_box(x0, y0, x1, y1, borderColor, boxColor)
  
end

-- 处理信息窗口的位置,一般在竖版中使用,降低存档读档的窗口位置
function MySTG.ui_handle()
  manager.machine.render.ui_container.yoffset = 0.12
end

return MySTG
